<?php

/**
 * JPGraph v4.0.3
 */

namespace lemon\JpGraph\Plot;

use lemon\JpGraph\Graph;
use lemon\JpGraph\Text;
use lemon\JpGraph\Util;

class GanttVLine extends GanttPlotObject
{
	private $iLine;
	private $title_margin = 3;
	private $iDayOffset   = 0.5;
	private $iStartRow	= -1;
	private $iEndRow	  = -1;

	/**
	 * CONSTRUCTOR.
	 *
	 * @param mixed $aDate
	 * @param mixed $aTitle
	 * @param mixed $aColor
	 * @param mixed $aWeight
	 * @param mixed $aStyle
	 */
	public function __construct($aDate, $aTitle = '', $aColor = 'darkred', $aWeight = 2, $aStyle = 'solid')
	{
		parent::__construct();
		$this->iLine = new Graph\LineProperty();
		$this->iLine->SetColor($aColor);
		$this->iLine->SetWeight($aWeight);
		$this->iLine->SetStyle($aStyle);
		$this->iStart = $aDate;
		$this->title  = new Text\TextPropertyBelow();
		$this->title->Set($aTitle);
	}

	/**
	 * PUBLIC METHODS.
	 *
	 * @param mixed $aStart
	 * @param mixed $aEnd
	 */
	// Set start and end rows for the VLine. By default the entire heigh of the
	// Gantt chart is used
	public function SetRowSpan($aStart, $aEnd = -1)
	{
		$this->iStartRow = $aStart;
		$this->iEndRow   = $aEnd;
	}

	public function SetDayOffset($aOff = 0.5)
	{
		if ($aOff < 0.0 || $aOff > 1.0) {
			Util\JpGraphError::RaiseL(6029);
			//("Offset for vertical line must be in range [0,1]");
		}
		$this->iDayOffset = $aOff;
	}

	public function SetTitleMargin($aMarg)
	{
		$this->title_margin = $aMarg;
	}

	public function SetWeight($aWeight)
	{
		$this->iLine->SetWeight($aWeight);
	}

	public function Stroke($aImg, $aScale)
	{
		$d = $aScale->NormalizeDate($this->iStart);
		if ($d < $aScale->iStartDate || $d > $aScale->iEndDate) {
			return;
		}

		if ($this->iDayOffset != 0.0) {
			$d += 24 * 60 * 60 * $this->iDayOffset;
		}

		$x = $aScale->TranslateDate($d); //d=1006858800,

		if ($this->iStartRow > -1) {
			$y1 = $aScale->TranslateVertPos($this->iStartRow, true);
		} else {
			$y1 = $aScale->iVertHeaderSize + $aImg->top_margin;
		}

		if ($this->iEndRow > -1) {
			$y2 = $aScale->TranslateVertPos($this->iEndRow);
		} else {
			$y2 = $aImg->height - $aImg->bottom_margin;
		}

		$this->iLine->Stroke($aImg, $x, $y1, $x, $y2);
		$this->title->Align('center', 'top');
		$this->title->Stroke($aImg, $x, $y2 + $this->title_margin);
	}
}
